我正在尝试了解有关数据库交互的更多信息,这让我开始使用本地应用程序。好吧,基本上,到目前为止我所做的事情已经有了不同的结果,我已经改变了很多东西,我甚至不确定我在这一点上有什么改变,哈哈。我不太确定我的一张桌子是否正确,所以我决定重新开始。这就是我想要的愚蠢的本地应用程序。
将有一个包含9个文本字段的编辑屏幕,由相应的数据库条目填充,如下所示:
feed 1: <input type="text" value="http://rss.news.yahoo.com/rss/topstories"> **the default feed for everyone, but they can change it**
feed 2: <input type="text" value="http://content.usatoday.com">
feed 3: <input type="text" value="http://newsrss.bbc.co.uk/rss/newsonl.../world/rss.xml">
feed 4: <input type="text" value="">
feed 5: <input type="text" value="">
feed 6: <input type="text" value="">
feed 7: <input type="text" value="">
feed 8: <input type="text" value="">
feed 9: <input type="text" value="">
<input type="submit" value="update">
我希望能够在这里编辑/添加新的Feed,并以相同的顺序检索这些Feed - 这是我之前尝试中混淆的重要原因。
将会有一个输出屏幕以相同的顺序输出供稿网址。
我有2个表,用户,现在提要,我相信我的用户表很好,它基本上存储了一些个人信息。我认为应该非常明显。 'state'列将存储来自select / dropdown的2个字符的州缩写,我已将其编入索引,因为我希望能够按州搜索用户。我在检索/编辑/更新这些数据时没有任何问题。
CREATE TABLE users (
user_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(40) NOT NULL,
state CHAR(2) NOT NULL,
email VARCHAR(60) NOT NULL,
pass CHAR(32) NOT NULL,
registration_date DATETIME NOT NULL,
PRIMARY KEY(user_id),
UNIQUE (email),
INDEX login (email, pass),
INDEX state (state)
);
这是我的新Feed表
CREATE TABLE feeds (
user_id SMALLINT UNSIGNED NOT NULL,
feed_url VARCHAR(255) NOT NULL DEFAULT 'http://rss.news.yahoo.com/rss/topstories',
feed_id SMALLINT UNSIGNED NOT NULL DEFAULT 1,
PRIMARY KEY(user_id, feed_url)
);
当用户输入新的Feed时,假设对于Feed#2,该值将插入到feed_url中,而feed_id将插入值 2 。如果输入了Feed#3,则会插入值为 3 的feed_id。这应该给我一些ORDER BY来按顺序检索记录,对吗?
数据编辑屏幕应始终显示Feed的输入方式 数据输出屏幕应始终显示Feed的输入方式。
那么,这看起来是否合适,我是否遗漏了一些东西?我的feed_url VARCHAR(255)可能不是万无一失但我只会用短网址进行测试。它也总是很容易碰到。
答案 0 :(得分:1)
由于您的Feed表将为所有用户保留Feed,因此您可能需要重新考虑此问题。
您已将feed_id的默认值设置为1,因此您将获得1的所有内容 - 在为用户添加第二个Feed时,您不会获得2。你需要逻辑。
也许当用户创建新Feed时,您将查询其所有记录,找到最高的Feed ID,然后将其添加1。然后,您可以将其用于新的Feed ID。
要找到你的最高ID你会做的事情(语法可能有问题,我通常是T-SQL)
从其中user_id = @user_id
的Feed中选择max(feed_id)我从未做过任何事情,让用户订购商品,因此您可能需要在决定任何事情之前对其进行调查。
答案 1 :(得分:0)
忘记上一篇文章 - 我以为你需要能够重新订购你的Feed。如果没有,您只需要将auto_increment添加到该feed-id字段。然后使用ORDER BY feed-id升序。
答案 2 :(得分:0)
为了强制每个用户都有可以更改的初始默认Feed的功能,我建议您删除feeds
表中的默认值并在应用程序代码中实现该功能。在用于创建(注册)新用户的代码中,将行添加到users
表,然后向feeds
表添加一行,其中包含此用户的第一个提要,其中包含默认URL(您可以存储在应用程序配置设置中。
如果您必须维护Feed的顺序,则有两个主要选项。使用您的feed_id
列,但将其填充为自动增量。但是,在某些情况下可能会破坏(不能保证总是在增加)。另一种方法是将feed_id
更改为feed_sequence
,并将其从代码填充到每个用户始终为1-9。
我发现您要求保留Feed网址的顺序,显然是不惜一切代价,非常不典型。为什么需要,为什么它如此重要?
我注意到您的users
表存在一些问题。首先,email
字段不够大(60是小的方式,320是我认为的最大值)。另一方面,我想知道你是否将pass
存储为纯文本,这将是一个巨大的安全问题。我还注意到pass
被声明为CHAR
而不是VARCHAR
。您没有说,但是您使用CHAR
表示您不是将密码存储为纯文本,而是将其混淆为固定大小(32)字段?
当然,Feed网址也很容易超过255个字符。
很高兴看到您已合理地规范化了数据,例如不执行feedUrl1
... feedUrl9
列。
祝福。