Как структурировать список в MySQL? - PullRequest
1 голос
/ 24 июня 2011

Я создаю веб-сайт, и часть функциональности заключается в том, что пользователь может создать список.Каждый пользователь может иметь только один список, и каждый список имеет только одного пользователя.В каждом списке также есть куча предметов.Элементы могут использоваться в нескольких списках.

Допустим, у меня есть следующие таблицы:

  • Пользователи
  • Списки
  • Элементы

Как определить, какие элементы есть в списке?Сейчас я храню строку CSV в таблице списков, но сомневаюсь, что это лучший способ.

Спасибо!

Ответы [ 4 ]

4 голосов
/ 24 июня 2011

Обычно у вас есть определения таблиц, такие как:

create table user (
  id int,
  name varchar,
  list_id int, /* optional */
  etc.
)

create table list (
  id int,
  name varchar,
  owner_id int
  etc.
)

create table item (
  id int,
  name varchar,
  etc.
)

create table item_x_list (
  id int,
  list_id int,
  item_id int
)

такой, что:

user -> list -> item_x_list -> item*

Обратите внимание, что вы можете вообще пропустить таблицу списков, если вам не нужны специфичные для списка данные, такие как имя.

2 голосов
/ 24 июня 2011

Вам понадобится еще одна таблица Lists_Items с двумя столбцами:

list_id
item_id
2 голосов
/ 24 июня 2011

Я бы структурировал это так

Пользователи
UserID (первичный ключ)
UserName
ListID (внешний ключ для Lists.ListID)

Списки
ListID (первичный ключ)
ListName

ListsToListItems
ListID (внешний ключ к Lists.ListID)
ListItemID (внешний ключ для ListItems.ListItemID)

ListItems
ListItemID (первичный ключ)
ListItemValue

1 голос
/ 24 июня 2011

С вашим ограничением, что у пользователя может быть только один список (или ни одного) и каждый список, принадлежащий ровно одному пользователю, я бы сделал:

User
  userid
  username
  Primary Key (userid)

List
  listid
  listname
  Primary Key (listid) 
  Foreign Key (listid) References (User.userid)

ListItem
  listid
  itemid 
  Primary Key (listid, itemid) 
  Foreign Key (listid) References (List.listid)
  Foreign Key (itemid) References (Item.itemid)

Item
  itemid
  description 
  Primary Key (itemid)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...