我想创建一个表,该表可以存储,比如说,第一列中某物的标题或名称,然后在下一列中具有关联的人或对象。问题是,可能有多个人与相同的头衔或名字相关联。如果第一列是我主键,我不能让每一行都有重复项。
Name1 | Jim
| John
| Jill
Name2 | Mike
| Mary
Name3 | Jeff
这需要用中间表来完成吗?如果需要,我不知道如何对它们进行实际编码(在SQLite中)。是否只使用引用主表中相应属性的外键创建它们?任何帮助都将不胜感激。
3条答案
按热度按时间fdbelqdn1#
是的,在SQLite(或任何关系数据库)中,您可以通过创建单独的表来对此进行建模。在关系模型中,在一列中存储两条信息是严重的错误。
很难对您的问题给出更准确的答案,因为您没有包括任何细节,但最有可能的情况是,您需要一个表来存储您感兴趣的“事物”,一个表来存储关于人的信息(每人一行),第三个“链接”表来将人与“物”相关联。
第三个表只包含组成“Things”表的主键的列和组成People表的主键的列。该表的主键由所有列组成(如果“Things”和People都由源表中的一列标识,则可能是两列),并包含两个外键,一个返回到“Things”,另一个返回到People。
添加一行以将人与事物相关联,但也可以添加其他行以将更多人与指定的事物相关联,并将更多的事物与每个人相关联。
wmtdaxz32#
另一种选择是使用专为支持单个字段中的多个值而设计的DBMS。有几种方法可供选择,其中至少包括一种开源风格。看看d3,Rocket Software(U2 DBMS),Ladybridge(开放QM),在谷歌上搜索多值DBMS以了解更多信息。
z5btuh9x3#
MySQL 8.0.17+通过将值存储在JSON数组中并添加多值索引,很好地支持了这一点。