我想在我的数据库中创建一个易于查询的字段。
我想如果我给出一些背景知识,那就更有意义了。我的表格列在我的网站上。我运行一个程序,查看列表,决定是否隐藏它们在网站上显示。我还出于各种原因手动隐藏列表。
我想将这些原因存储在一个字段中,因此可以隐藏多个原因。
所以我需要某种形式的逻辑来确定使用了哪些原因。
任何人都可以向我提供任何指导,说明将来会出现什么样的新原因,以及哪些内容可以快速轻松地查询?
答案 0 :(得分:2)
一个列表有很多隐藏的理由
你实现“一对多”的关系,通过给“很多” - 一个外键指向你“一”方面的一行。在这种情况下,这将意味着两个表:
listing
reason_to_hide_listing
列表可能有一个id(int)和一些文本(text)。
reason_to_hide_listing将拥有自己的id(int),一个名为listing_id(int)的外键列,以及一个名为reason(text)的列。
要查看列表是否隐藏,请查询表reason_to_hide_listing以获取与您要显示的列表相同的listing_id(如果您应该显示)。如果一行或多行返回,则不应显示此列表。
SELECT COUNT(*) FROM reason_to_hide_listing WHERE listing_id = ?;
要找出未显示一个列表的所有原因,请从表reason_to_hide_listing中选择原因,其中外键是手头列表的ID。
SELECT reason FROM reason_to_hide_listing WHERE listing_id = ?;
隐藏列表,同时添加隐藏原因的原因,只需在reason_to_hide_listing中插入一个新行,其中listing_id指向您要隐藏的列表。
INSERT INTO reason_to_hide_listing(listing_id, reason) VALUES(?, ?);
答案 1 :(得分:1)
如果你想让一个用户(例如,你自己:))想出自己的理由,可以在你的表中添加一个varchar(255)
可空字段来存储原因,然后在表中查询你的表使用where hide_reason is null
或其他东西。
如果您希望通过更改表格定义偶尔更改一些固定的原因,请使用ENUM
字段:http://dev.mysql.com/doc/refman/5.0/en/enum.html。 (我不知道你正在使用哪个数据库,所以我将使用我最喜欢的数据库)
如果你想要一些固定的理由,你可以不费力地改变,并且你可以在下拉列表中显示供用户选择,@ davogotland的解决方案确实是最好的。在数据库环境中添加表并不过分;)
在任何情况下,为了清晰起见,您总是可以选择在is_hidden
字段旁边使用单独的hide_reason
字段,或者因为您想要记住隐藏字段的人隐藏字段的原因再一次,等等。如果您这样做,请使用BIT
/ boolean
/ TINYINT
字段。
编辑:
啊,等等。我误解了上面的答案。您需要一组固定的原因,并希望每个列表都有多个原因。这意味着您处于多对多的情况下(每个列表可能有多个原因,并且每个原因都可以分配给多个列表)。我知道有三种方法可以做到这一点:SET
数据类型,类似于ENUM
但可能包含多个值。见:http://dev.mysql.com/doc/refman/5.0/en/set.html。如果您正在使用MS Access,则有一个“查找向导”数据类型,它似乎做了类似的事情(并且据说包括一个实际的查找向导)。reasons
和listings_reasons
,如下所示:原因:
reason_id
reason_text
listings_reasons:
listing_id
reason_id
现在,填写您的reasons
表格可能的原因,并使用listings_reasons
表格将它们链接到列表。这是最常见的解决方案,因为它允许您在不修改数据库结构的情况下添加可能的原因。
答案 2 :(得分:0)
您可以使用枚举类型作为位标志,并将值存储为数据库中的int。然后你只需要一个表来存储int和相关页面的FK。
[Flags]
enum HideReasons {
None = 0x0,
SomeReason = 0x1,
OtherReason = 0x2
}
page.ReasonsToHide = HideReasons.SomeReason | HideReasons.OtherReason;
编辑:刚刚意识到你可能没有使用C#。希望这无论如何都有帮助。