首页 \ 问答 \ 数据库设计 - 当一个记录有许多属性时(database design - when one record has many properties)

数据库设计 - 当一个记录有许多属性时(database design - when one record has many properties)

我正在尝试设计一个数据库,但不知道如何处理这种情况。

假设我有一张包含地理位置的表格 - 数十万个。

现在假设我想存储“小部件”的数据。 理论上,每个小部件都有一个“级别”,对应于每个地理位置 - 有些具有0或NA的“级别”,其余的具有其他各种值。 每个小部件还具有数百个地理位置的任意组合的“级别”。 因此,例如,如果小部件A的芝加哥级别为10级,纽约州级别为20级,则芝加哥+纽约级别为30级。 我无法为每个小部件级别存储所有地理位置组合(即,我无法访问所有这些数据)。

相反,我想存储用户输入的每个小部件的级别。 因此,用户能够获得他们选择的这些级别值(即,他们想要的地理位置的任何组合)。 他们告诉我它是什么小部件,他们选择的地理位置的组合,以及级别的价值。

我如何存储这些数据?

答案可能非常简单,我可能只是没有正确思考,但任何帮助都会非常感激! 谢谢!


I'm trying to design a database, but not sure how to handle this situation.

Assume I have a table with geographical locations - hundreds of thousands of them.

Now assume I want to store data for "widgets". In theory, each widget has a "level" that corresponds to each and every geo location - some have a "level" of 0 or NA and the rest have other various values. Each widget also has a "level" for any combination of the hundreds of geo locations. So for example, if widget A has a level of 10 for Chicago and 20 for New York, it also has a level of 30 for (Chicago+New York). I do not have the ability to store ALL combinations of geo locations for every widget level (ie, I don't have access to ALL of that data).

Instead, I want to store the level for each widget that my users input. So, the users are able to obtain these level values however they choose (ie, with whatever combination of geo locations they want). They tell me what widget it is, what combination of geo locations they chose, and the value of the level.

How do I store this data?

The answer may be super simple and I may just not be thinking properly, but any assistance would be much appreciated! Thanks!


原文:https://stackoverflow.com/questions/36366928
更新时间:2022-12-05 16:12

最满意答案

听起来你可以这样做:

  1. 具有PK GeoLocationID的地理位置表

  2. 具有PK UserID的用户表

  3. 带有PK WidgetID的小部件表
  4. 用于窗口小部件地理位置组合的用户定义级别表,即

    TABLE UserWidgetLocation(

    UserID PK FK,
    WidgetID PK FK,
    GeoLocationID PK FK,
    Level )
    

Sounds like you could do something like this:

  1. A table of geo locations with PK GeoLocationID

  2. A table of users with PK UserID

  3. A table of widgets with PK WidgetID
  4. A table of user-defined levels for widget-geo location combinations i.e.

    TABLE UserWidgetLocation(

    UserID PK FK,
    WidgetID PK FK,
    GeoLocationID PK FK,
    Level )
    

相关问答

更多
  • record
  • 你所描述的是一个Entity-Attribute-Value数据库,它通常用于你描述的情况,稀疏的数据绑定到一个单一的实体。 EAV表格很容易搜索。 问题是没有找到行,它找到相关的行。 为不同的实体提供不同的表提供了域建模,但是它们也提供了弱形式的元数据。 在EAV中没有这样的抽象。 (Java的EAV类比将声明所有函数的形式参数都是Object类型 - 所以你不会得到类型检查。) 我们可以轻松查找属性键,但没有将这些属性键分组。 维基百科有一篇关于EAV的非常好的文章,但是现在阅读它 - 这主要是一位作者 ...
  • 我已经看到过这种做法是在假设的 (通常未经证实的)加入“费用”之前完成的 - 它基本上是将一个庞大的数据表转换为一个列重的表格。 正如你所暗示的,当他们用完专栏时,他们会创建新的表格,从而陷入他们自己的局限之中。 我完全不同意它。 就我个人而言,我会坚持旧的结构并重新评估性能问题。 这并不是说旧的方式是正确的方式,在我看来,它比“改进”略好,并且不需要对数据库表和DAL代码进行大规模的重新设计。 这些表格让我大致意识到静态...... 缓存将是一个更好的性能改进,而不会损害数据库,我会首先考虑一下。 做一次 ...
  • 我在现在的公司看到了这两种方法,一定会倾向于第一(基于股票交易的总计)。 如果您只将总量存储在某个地方,您就不知道如何到达该号码。 没有交易历史,你可能会遇到问题。 我写的最后一个系统通过将每个交易存储为正数或负数的记录来跟踪股票。 我发现它的效果很好。 I have seen both approaches at my current company and would definitely lean towards the first (calculating totals based on stock ...
  • 是; 这是有效的设计。 您的设计是否符合您的需求是另一个问题。 问你自己: 我的产品表在1年,2年和4年内会有多少行? 我的类别表在1年,2年和4年内会有多少行? 我的属性表在1年,2年和4年内会有多少行? 如果您发现属性表随着产品和类别的不同而不受控制地增长,那么您可能会遇到缩放问题。 另一方面,如果您的产品表在一段时间后稳定下来,那么您可能没有问题。 专业提示 :当问题成为问题时解决问题(即,听产品经理然后添加现实主义...... ;-)。 Yes; it's valid design. Whether ...
  • 听起来您只是希望能够保留模型数据的更改历史记录。 有几个选项,请参阅Django包中的这个列表 。 在编辑历史和查看报告方面, django-simple-history可能是一个很好的匹配。 这有管理员集成和轻松查询历史记录的能力。 另外 It sounds like you just want to be able to keep a history of changes to your model's data. There are a few options out there, see this ...
  • 是的,这是不好的做法,因为一个当前值可以有两种不同的状态类型。 将StateTypeId列从CurrentState删除,并使其仅通过StateValueId 。 您的唯一索引应该是CurrentState和StateValueId 。 当然,如果您坚持在CurrentState使用StateTypeId ,则可以设置一个check约束,以确保StateTypeId等于StateTypeId的StateValueId 。 但这真的很迂回。 将它们全部留在自己的筒仓中会更清洁,更易于维护。 Yes, this ...
  • 一个想法是设计2个表如下: 实体表:EntityId - PK,标题,内容 EntityHistory表:EntityId - PK,版本 - PK,CreatedOn,标题,内容 一些想法 : 通常,您只需要使用行的当前版本,因此在您加入数据时,您的查询不会考虑以前的版本等。长期前提,这可能会对性能产生巨大影响,统计信息将会不准确,数据选择性会对指数选择等产生负面影响。 如果您经常使用当前值和历史值,则可以在两个表上将视图定义为联合。 如何管理添加新版本? 在事务中,从EntityHistory中的Ent ...
  • 听起来你可以这样做: 具有PK GeoLocationID的地理位置表 具有PK UserID的用户表 带有PK WidgetID的小部件表 用于窗口小部件地理位置组合的用户定义级别表,即 TABLE UserWidgetLocation( UserID PK FK, WidgetID PK FK, GeoLocationID PK FK, Level ) Sounds like you could do something like this: A table of geo locations with ...
  • 您不希望在公用表中使用FK引用。 公用表将具有密钥和类型指示符,详细信息表将使用它们的 FK引用。 common_fields ID Form_type (defines what kind of form) must contain 1, 2 or 3 Name Age Address constraint UQ_Common_Fields_ID_Type unique( ID, Form_Type ) 唯一约束使FK引用(ID,Form_Type)成为可能。 form1 ID Form ...

相关文章

更多

最新问答

更多
  • Apache HttpClient(4.1和更新版本):如何进行基本身份验证?(Apache HttpClient (4.1 and newer): how to do basic authentication?)
  • 复选框不适用于模态(Checkbox does not work in modal)
  • 当使用大标题无法正常工作时,iOS 11会滚动到顶部(iOS 11 scroll to top when using large titles doesn't work properly)
  • 为什么我的Arduino不能超过10?(Why can't my Arduino compare above 10?)
  • 从Lib中删除PDB文件/功能(Remove the PDB file/functionality from Lib)
  • rails-2.3.5和rack-1.0.1的来源在哪里?(Where are the sources for rails-2.3.5 and rack-1.0.1?)
  • 如何使用List <>成员不可变的类?(How to make a class with List<> member immutable?)
  • Microsoft Edge popup扩展如何获取后台页面?(Microsoft Edge popup extension how to get backgroundpage?)
  • python删除中文unicode字符串之间的空格,但不删除英文单词之间的空格(python to remove space between Chinese unicode strings but not between English words)
  • SBT:如何Dockerize一个胖罐子?(SBT: How to Dockerize a fat jar?)
  • 如何从服务器请求中保存图像的分区以便以后合并(How to save segements of image in memory from server request for merging later)
  • python这段程序中a=self.[:]是什么意思 self一般用法是啥
  • ActiveRecord :: StatementInvalid:PGError:错误:关系“指令”不存在(ActiveRecord::StatementInvalid: PGError: ERROR: relation “instructions” does not exist)
  • 虚拟机安装kail linux最低配置是多少?
  • fread()中的空字符和c中的strncpy()(Null character in fread() and strncpy() in c)
  • 从ShutdownHook中查找程序退出的原因(Find, from a ShutdownHook, why a program exits)
  • 每天在固定时间运行任务(Run a task at fixed time everyday)
  • 电脑开不了机了,开机后进了桌面,显示WINDOWS BOOT MANAGER
  • 获取字符串第n个出现的索引?(Get the index of the nth occurrence of a string?)
  • python selenium 怎么打开 Chrome 并且能设置代理,请问可以指导小弟一下吗。
  • 错误:imagecopymerge()期望参数2是资源(Error: imagecopymerge() expects parameter 2 to be resource)
  • 在我的代码中,“无法找到可安装的ISAM”错误的原因是什么?(What could be the cause of 'Could not find installable ISAM' error in my code?)
  • Access 2013 - 没有自动编号的顺序编号(Access 2013 - sequential numbering without autonumber)
  • 将带有函数的Javascript对象转换为字符串(Converting a Javascript Object with Functions into a String)
  • Java中实现封装与信息隐藏与抽象与隐藏数据的比较(Practical example Encapsulation vs Information Hiding vs Abstraction vs Data Hiding in Java)
  • 不要包必须匹配java文件所在的子目录吗?(Don't packages have to match the subdirectories the java file is in?)
  • PyCharm Python控制台中的文件路径错误(File path wrong in PyCharm Python Console)
  • 在数据框列上应用curve_fit(Apply curve_fit on dataframe columns)
  • Java中的DateTime.FromOADate()相当于什么(Java中的Datetime是Datetime的两倍)(What is the equivalent of DateTime.FromOADate() in Java (double to Datetime in Java))
  • 给定DCEL,其中双胞胎等于下一个边缘,细分可以有多少面?(Given a DCEL where the twin is equal to the next of an edge, how many faces can the subdivision have?)