2010-07-05 6 views
0

Voici la situation: J'ai une table appelée "livres", et une table appelée "catégories". Chaque "Livre" appartient à une catégorie, donc le livre a un champ appelé "identifiant de catégorie". Mais est-il nécessaire de créer une "categoryList" pour stocker "book id"? Je peux utiliser une instruction select pour trouver les livres qui appartiennent à des catégories, mais est-ce une meilleure approche pour stocker l'ID de livre de categoryList? Je vous remercie.Est-ce nécessaire pour signaler la relation?

Répondre

3

En fait, il serait préférable d'utiliser une table de mappage pour spécifier la relation catégorie/livre.

ce tableau pourrait être nommé category_book et ont une colonne pour category_id & une colonne pour book_id

+0

D'accord, de cette façon, vous pourriez avoir un livre appartenant à plusieurs catégories – BenW

+0

Mais une relation plusieurs à plusieurs dans ce cas est une mauvaise idée. Comment un seul livre peut-il s'asseoir sur deux étagères différentes dans une bibliothèque? C'est essentiellement ce que vous faites avec une relation de plusieurs à plusieurs. –

+0

en fait, une relation de plusieurs à plusieurs a un autre avantage dans la conception. il sépare clairement les "quelles sont mes entités" de "comment puis-je les utiliser". un livre est un livre, une catégorie est une catégorie, la relation catégorie/livre n'a rien à voir avec ce qu'est un livre – dweeves

0

Dans votre previous question vous dites un livre appartient à une seule catégorie. Vous n'avez donc pas besoin d'une table CategoryList. C'est un entretien supplémentaire sans avantage supplémentaire. Soutenir les requêtes par catégorie est pourquoi la nature nous a donné indices.

+1

Dans une vraie bibliothèque, un livre a parfois du mal à être sur deux étagères à la fois, mais différentes collections peuvent avoir leurs propres copies. Dans les bibliothèques, chaque copie d'un livre doit avoir son propre identifiant et assignation. –

+0

Si une bibliothèque achète plus d'une copie d'un livre, la base de données «devrait» avoir plusieurs enregistrements de ce livre (un enregistrement pour chaque livre physique) et attribuer l'ID de catégorie en conséquence. –

3

Si un livre peut appartenir à plusieurs catégories, et qu'une catégorie peut avoir BEAUCOUP de livres, alors vous avez besoin d'une relation MANY to BEY en utilisant une table intermédiaire (quelque chose comme Books _JOIN_Categories).

Books 
ID | BookName 

Categories 
ID | CategoryName 

Books_Join_Categories 
BookID | CategoryID 

Si chaque ne possède qu'une seule catégorie, mais chaque catégorie peut avoir des livres NOMBREUX, alors la structure de votre relation actuelle (CategoryID dans le tableau Livres) devrait vous faire très bien.

Books 
ID | CategoryID | BookName 

Categories 
ID | CategoryName 

En fait, la deuxième option est probablement la meilleure. Une relation de plusieurs à plusieurs n'est probablement pas une bonne idée dans cette situation (à moins que le livre ne soit déchiré en deux pour être mis sur des étagères séparées). Si deux sections différentes "catégorie" nécessitent le même livre, alors chaque catégorie (section dans une bibliothèque) obtiendrait leur propre copie physique du livre. Signification de deux enregistrements de livre dans la base de données, chacun avec un CategoryID distinct

Questions connexes