最多3列的表具有相同的含义

时间:2014-06-22 12:42:55

标签: sql database database-design

我的表Person最多有3个opinionPerson的每一行我们都有不同的意见,换句话说,你永远找不到2个有相同意见的人,那里personopinion之间没有多对多关系。

我永远不会检查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)

3 个答案:

答案 0 :(得分:2)

我会推荐两张桌子。第一个表是persons表。这将有PersonId以及关于此人的各种其他信息。

第二个表是PersonOpinions表。每个意见都有一行,信息如下:

  • PERSONID
  • 意见
  • 意见的日期和时间
  • 意见主题(如适用)
  • 输入意见的方法(如适用)

根据您的说法,不需要单独的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中。什么是查询(不知道表值)

的行
  1. 人p有意见[意见]
  2. 人[人]没有意见o
  3. ℃。每个表都需要一个由其列参数化的语句,其中表中的行是使语句成立的行。

    1. 你桌子的陈述是什么?
    2. 为什么不是

          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]
      ...
      
    3. 你应该在回答问题时遇到进一步的不良情况。除了不清楚之外,到目前为止的描述也很糟糕,因为答案很难看,你的桌子很难使用。这么多,以至于我甚至不想输入我知道他们会喜欢的例子。所以,在你提供更多信息之前,我会将这些问题保留为修辞而不是示例。