我的表Person
最多有3个opinion
,Person
的每一行我们都有不同的意见,换句话说,你永远找不到2个有相同意见的人,那里person
和opinion
之间没有多对多关系。
我永远不会检查opinion
进行验证,就像没有2人有同样的意见一样,它只是为了获取信息。
我应该只制作一张表
Person ( #id_person , ... , opinion1 , opinion2 , opinion3 , ... )
或添加新表:
Person ( #id_person , ... )
opinions ( #id_opinion , opinion , *id_person* ) // id_person FK
对我来说,我不想创建一个新表opinions
,因为它没有任何意义我将总是添加新行,因为我有一个新的Person
如果我将它们分组在一个表中并且我只有一个opinion
那么会有浪费空间的问题吗?即使我将opinion
声明为varchar
?
如果我创建一个新表opinions
,它将需要一个主伪密钥id_opinion
?
opinion
可以是varchar(50)
。
答案 0 :(得分:2)
我会推荐两张桌子。第一个表是persons
表。这将有PersonId
以及关于此人的各种其他信息。
第二个表是PersonOpinions
表。每个意见都有一行,信息如下:
根据您的说法,不需要单独的opinions
表,因为该意见基本上是"唯一的"。但是,您可能希望将意见本身存储在一个单独的表中,每个意见单独一行。
您可以使用触发器来强制执行一个人只有三种意见的约束。如果您决定在将来更改此设置,那么使用双表解决方案将很容易。
答案 1 :(得分:0)
我建议去3个不同的桌子(2个基地和1个交叉点)。由于Person和Opinions是两个不同的实体,它们可能共享M:M的关系,因此需要交集表。我相信它只是简单的事情而不是在单个表格中隐藏信息。
答案 2 :(得分:0)
你应该有两张桌子。 (您是否需要意见ID是一个单独的问题。您不需要。)
// person [id_person] has name [name] and ...
person(id_person,name,...)
// person [id_person] has opinion [opinion]
opinion(id_person,opinion)
fk (id_person) references person
您的设计很糟糕,部分原因是:目前尚不清楚以下问题的答案是什么,但必须知道有人使用数据库的答案。当你给出答案(即表的完整设计的其余部分)时,它们将说明其他问题。
假设:
person p1 has opinion o11.
person p1 has opinion o12.
person p1 has no other opinions.
person p3 has opinion o21
person p3 has no other opinions.
一个。表格中有哪些行?
B中。什么是查询(不知道表值)
的行℃。每个表都需要一个由其列参数化的语句,其中表中的行是使语句成立的行。
为什么不是
person [id_person] is named [name] and ...
AND person [id_person] holds opinion [opinion1]
AND person [id_person] holds opinion [opinion2]
AND person [id_person] holds opinion [opinion3]
...
你应该在回答问题时遇到进一步的不良情况。除了不清楚之外,到目前为止的描述也很糟糕,因为答案很难看,你的桌子很难使用。这么多,以至于我甚至不想输入我知道他们会喜欢的例子。所以,在你提供更多信息之前,我会将这些问题保留为修辞而不是示例。