我正在创建一个页面,我希望用户能够在该页面上为事件预订座位。
- 1位用户只能预订1个座位
- 用户在登录时没有选择座位,首先是在购买了一个位置之后
- 需要能够清除席位表,而不会丢失用户表中的任何内容(当然,分配的席位除外。)
我创建了两个表,因为我对 mySQL 还很陌生,所以我想检查一下是否正确完成:
- 成员表:
- user_id int(8) Not null auto_increment
- user_name varchar(30) 不为空
- user_pass varchar(255) 不为空
- seat_ID smallint(6) 是 NULL
- 座位表
- seat_ID smallint(6) 无 auto_increment
- user_id smallint(6) 是 NULL
- seat_status tinyint(4) 是 NULL
- seat_status tinyint(4) 是 NULL
我创建了 2 个 FK-refs:
ALTER TABLE seats
ADD CONSTRAINT FK_seats
FOREIGN KEY (user_id) REFERENCES members(user_id)
ON UPDATE CASCADE
ON DELETE CASCADE;
ALTER TABLE seats
ADD CONSTRAINT FK_seats
FOREIGN KEY (seat_ID) REFERENCES members(seat_ID)
ON UPDATE CASCADE
ON DELETE CASCADE;
我走在正确的轨道上吗?使用此设置,我能否开发出像样的最终产品?建议/改进?我不想在几周内重新开始,因为数据库结构质量很差。
最佳答案
首先,如果任何用户在任何给定时间只能持有一个席位,我不明白你为什么要使用第二张 table ,其次 user_id
在 seats-table
应与 user_id
大小相同在成员表中即 int(8)
, 否则一段时间后你将无法让用户入座,第三个问题是 seat_status 的重复,我想这是一个错误或者你有另一个名字。
在我看来,如果它是 1->1 映射,则更好的想法是使用单个表并将其定义为
CREATE TABLE `members-table` (
user_id int(8) not null auto_increment,
user_name varchar(30) not null,
user_pass varchar(255) not null,
seat -- your type choice, should be nullable if not seated
);
使用此配置清理座位非常简单
UPDATE `members-table` SET `seat` = NULL;
关于mysql - 正确的数据库?需要改吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12457629/