我有很多表需要引用场景ID,可以是SET。问题是我需要能够更新包含我的应用程序登录信息的表中的集合。该集合需要根据数据库上存在的场景数量进行扩展(或可能缩小)。可以在phpmyadmin中进行吗?
根据在Web界面中看到的内容,我必须预先定义SET值。但是在创建列之后,我找不到任何有关如何编辑SET可能值的信息。
答案 0 :(得分:0)
您所拥有的是登录名和场景之间的多对多关系。
实现此目的的正确方法是使用三个表,例如:
CREATE TABLE logins (login_id INT PRIMARY KEY ...);
CREATE TABLE scenes (scene_id INT PRIMARY KEY ...);
CREATE TABLE login_has_scene (
login_id INT NOT NULL,
scene_id INT NOT NULL,
PRIMARY KEY (login_id, scene_id),
FOREIGN KEY (login_id) REFERENCES logins (login_id),
FOREIGN KEY (scene_id) REFERENCES logins (scene_id)
);
这样,您可以随时添加新场景,并且可以通过在每个登录场景对中添加一行来引用来自任何登录名的任何场景。
这比使用SET
更好,因为SET
要求您每次添加场景时都使用ALTER TABLE
重新定义值列表,这将变得很繁琐。 / p>
此外,SET
列最多允许64个不同的值。如果您希望这些表支持更多场景,则必须添加更多SET列,或开始回收场景ID或其他内容。
多对多表是一个更好的解决方案。
坦率地说,我已经使用MySQL近20年了,但是我从未发现SET
数据类型有很好的用途。