use*_*666 8 database database-design
应该用两个或三个表实现两个表之间的一对多关系?例如,我们应该:
author(id,otherAttributtes)
books(id,authorid,otherAttributes)
Run Code Online (Sandbox Code Playgroud)
要么
author(id,otherAttributtes)
books(id,otherAttributes)
authorConnectsBooks(authorid,booksid)
Run Code Online (Sandbox Code Playgroud)
我更喜欢第一种方法,但我已经看过很多次第二种和更复杂的应用程序.第一种方法有任何缺点,或者只是个人的方式可以遵循?
Jon*_*onH 23
第一个示例显示了一对多关系,而第二个示例显示了多对多关系.
示例假设我们使用第一个示例
Author
AuthorID
Book
BookID
AuthorID
Run Code Online (Sandbox Code Playgroud)
你如何表示Jane和Jon都写了"Stackoverflow for fun"这本书?在这个关系表中你不能,你已经表达过一个作者可以写很多书.所以,无论是Jane写的还是Jon写的.如果只有其中一个人写了书,你可以使用这种关系类型.但是,如果你想表明两者都写这本书你需要多对多的关系.
现在使用Jane和Jon的相同类比,您可以使用您的第二个示例 - 多对多关系来代表这两本作者.
Authors
Joel
Jeff
Books
Stackoverflow Joel
Run Code Online (Sandbox Code Playgroud)
可怜的杰夫,他从上面的例子中得不到stackoverflow ...所以我们需要解决这个问题:
Author
Joel
Jeff
Books
Stackoverflow
AuthorBooks
Stackoverflow Jeff
Stackoverflow Joel
Run Code Online (Sandbox Code Playgroud)
现在每个人都很开心......
一对多是两张桌子.
第二个是多对多.
Authors
1 Larry Niven
2 Jerry Pournelle
Books
1 Integral Trees
2 King David's Spaceship
3 The Mote in God's eye
AuthorsBooks
1 1
2 2
1 3
2 3
Run Code Online (Sandbox Code Playgroud)
一对多关系应使用2个表来实现。
但是,您在示例中提出的关系(作者和书籍之间)不是一对多的,而是多对多的。
“一位作者可以写很多书,而一本书可以由一个或多个作者写。”
并且应该使用3个表实现多对多关系。
祝你有美好的一天。
| 归档时间: |
|
| 查看次数: |
24236 次 |
| 最近记录: |