我有一些包含一些列的表
CREATE TABLE test (
testid INT,
field1 CHAR(10),
field2 VARCHAR(50),
field3 DATETIME,
field4 MEDIUMINT
[...]
);
现在我希望能够在我的应用中设置一个设置,允许我为特定用户启用或禁用其中一些设置。
CREATE TABLE user (
userid INT
);
我在考虑:
CREATE TABLE user_test_visible (
userid INT,
field1 BOOL,
field2 BOOL,
field3 BOOL,
field4 BOOL
[...]
);
我也在考虑这样的事情:
CREATE TABLE user_test_visible (
userid INT,
field_name VARCHAR(30),
visible BOOL);
这些方法中哪些都合情合理?
答案 0 :(得分:1)
我建议做这样的事情。
CREATE TABLE test
(
fieldId INT,
field CHAR(10)
)
要有一个包含字段的表。然后,如果您需要再添加一个(更改要求),则无需添加新列。
我会跳过布尔值并使用一个具有共享主键的表。像这样:
CREATE TABLE user_test_visible (
userid INT,
fieldId INT
);
我建议跳过布尔值的原因是,如果没有行,请显示该字段。这取决于你的起始价值。如果您希望用户从开头看到所有字段,那么您可以考虑使用这样的表:
CREATE TABLE user_test_not_visible (
userid INT,
fieldId INT
);
然后,此表中有一行,则不显示该字段。
修改强>
使用时插入字段,你必须有一些预部署脚本吗?在那里,您还可以指定哪些列可见,哪些列不可见。如果您有不同的数据类型,则ether具有您所拥有的布局,或者您只能使用sql_variant。但是海狸说,例如linq-to-sql不支持这种类型的列作为主键。
这只是我的身份。希望它有所帮助
答案 1 :(得分:0)
也许更灵活的方法是在应用程序中定义“角色”。用户将与一个或多个角色相关联,并且每个角色将与一组列相关联。这些列集的并集将是用户可以看到的。这种方法需要更多努力才能确定用户可以看到的列,但从长远来看,这将使用户管理变得更容易。它还将用户权限与数据库访问权限区分开来。