У меня есть стол для магазинов мороженого (салон) и стол для разных вкусов, предлагаемых в гостиной. Кроме того, есть пользовательская таблица, и пользователь должен иметь возможность оценивать ароматы.Дизайн базы данных (DDL)
Существует соотношение «один ко многим» между парлором и ароматом, где аромат является слабым лицом. Существует также много-много отношений между Flavor и User, которые затем создают новую таблицу под названием Vote.
Мой DDL-скрипт выглядит следующим образом:
CREATE TABLE parlor (
parlor_id INTEGER AUTO_INCREMENT,
name VARCHAR(255),
street VARCHAR(255),
street_numb INTEGER,
zip INTEGER,
PRIMARY KEY (parlor_id)
);
CREATE TABLE flavour (
name VARCHAR(255),
parlor_id INTEGER,
PRIMARY KEY (name, parlor_id),
FOREIGN KEY (parlor_id) REFERENCES parlor (parlor_id)
);
CREATE TABLE user (
uid INTEGER AUTO_INCREMENT,
username VARCHAR(255) UNIQUE,
password BINARY(64),
PRIMARY KEY (uid)
);
CREATE TABLE vote (
date TIMESTAMP,
ranking INTEGER(5),
flavour VARCHAR(255),
uid INTEGER,
parlor_id INTEGER,
PRIMARY KEY (date, uid, flavour, parlor_id),
FOREIGN KEY (uid) REFERENCES user (uid),
FOREIGN KEY (flavour) REFERENCES flavour (name),
FOREIGN KEY (parlor_id) REFERENCES flavour (parlor_id)
);
Моя проблема в том, что я могу проголосовать за аромат, который даже не существует в гостиной. Например:
INSERT INTO vote (date, ranking, flavour, uid, parlor_id) VALUES ('...', 5, 'Chocolate', 1, 10)
В гостиной с ID 10, пользователь с идентификатором пользователя 1 ставки на вкус 'Шоколад' с 5
Но когда я делаю ...
SELECT * FROM flavour WHERE parlor_id=10;
нет вкуса 'шоколад'
Как пользователи связаны с гостиной? Это где они покупают аромат? Нельзя ли покупать у разных салонов? Есть ли что-то другое в отношении аромата из разных салонах или шоколад из Паркера А так же, как шоколад из Паркера Б? – TommCatt