Database design 数据库设计问题

Database design 数据库设计问题,database-design,Database Design,如果DB设计为: Table A a (type x) a is (PK) Table B a (type x) a is (PK) Table C a (type x) a is (FK) references A(a) a is (FK) references B(a) 这个设计正确吗?如果不是,这种情况下的最佳设计是什么?这就是所谓的a,它是一组问题的正确设计。除非您定义了问题,否则无法告诉您该问题的设计是否正确。因此,您只希望在表B和a中存在对应行时,才能在表C中插入一行。这些行必

如果DB设计为:

Table A
a (type x)
a is (PK)

Table B
a (type x)
a is (PK)

Table C
a (type x)
a is (FK) references A(a)
a is (FK) references B(a)

这个设计正确吗?如果不是,这种情况下的最佳设计是什么?

这就是所谓的a,它是一组问题的正确设计。除非您定义了问题,否则无法告诉您该问题的设计是否正确。

因此,您只希望在表B和a中存在对应行时,才能在表C中插入一行。这些行必须具有相同的id值。为什么不合并表A和表B。拆分导致列太多?要么这样做,要么删除表C中表B上的fk,并在表B中添加对表a的引用。尽管我不完全确定您希望通过这种设计实现什么。

看起来您有一种三元关系。如果不知道A、B和C是什么,就不可能知道你的设计是否正确。

我相信你所指的情况是C可能是A或B的孩子

比如说

如果A是一个页面

B是图片

C是注释

C可以是图片的注释,也可以是页面的注释

在这种情况下,我会将C调整为双键,如下所示

Table C:
a (type x)
b (type CHAR) //<- defines which table a is the key of
INDEX(b,a)

SQL = SELECT * from C where b = TABLE_A_name and C.a = A.a 
or
SQL = SELECT * from C where b = TABLE_B_name AND C.a = B.a 
然后,您必须从应用程序端实现数据完整性


因此,它在外键实现和数据完整性方面是模糊设计。问题是,应用程序功能是否值得混乱,以及它是否将处于一个管理良好的环境中。

您能否详细说明您试图通过这种设计实现什么,甚至可能包括您正在使用的DBMS类型?您的意思是表C有一个单独的字段,它是a和B的FK?-1。在星型模式中,事实表C将有两个单独的字段,一个是FK到a,另一个是FK到B。在这个设计中,只有一个字段FKs到a和B。你是对的,他最初指定的方式,甚至第二次读取时,他似乎有两个单独的字段。是的,这肯定是一个不寻常的设计…:-1.不完全是这样,三元多对多关系需要C有两个单独的字段,一个是FK到a,另一个是FK到B。在询问者的设计中,只有一个字段FKs到a和B。哦,你说得对,我读不懂模式。我以为表C有3个字段。@JMM:很容易做到。我想不出询问者到底想用这个安排做什么…+0。这可能是他/她想要做的,但我们怎么知道呢/如果我在任何情况下都等着知道的话,我什么也不会做。这种特殊的技术为我创造了奇迹,所以我分享了可以帮助我的东西。老实说,这可能是他/她想要的。