加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在SQLITE3中创建一对多?

发布时间:2020-12-12 23:43:31 所属栏目:百科 来源:网络整理
导读:如何在SQLITE3中创建一对多? 我有2张桌子: Mans:_id name 1 antony 2 fred 和 point_id date point 1 23 77 24 99 2 25 78 5 0 我不懂SQL语法,请帮帮我. 通过什么iamkrillin illin虾-skrillin恶棍: CREATE TABLE (points) points_id INTFOREIGN KEY(man_i
如何在SQLITE3中创建一对多?
我有2张桌子:
Mans:
_id   name
 1    antony
 2    fred

point
_id   date   point   
 1     23     77
       24     99 

 2     25     78
        5     0

我不懂SQL语法,请帮帮我.

通过什么iamkrillin illin虾-skrillin恶棍:
CREATE TABLE (points) points_id INT
FOREIGN KEY(man_id) REFERENCES mans(PrimaryKeyField)
ON DELETE CASCASDE ON UPDATE CASCASDE

这是一个现实世界的例子.假设您有一些人向您推荐业务:您的员工,您的朋友,您做广告的当地企业等.来自的客户称为“referal”业务.每个人只算作一个参考,但参考者可以参考许多参考(例如,一个员工可能会引用20个新客户;该员工是您的推荐人,而该员工已经进行了20次参考).所以,你有1个引用者和20个referals(一对多):

CREATE TABLE referal(                                         
  referal_id INTEGER UNIQUE NOT NULL PRIMARY KEY,//A customer can only be 1 referal.
  referal_method TEXT,//How were they refered?  By phone?
  referer_id INTEGER,//Who refered them?
  FOREIGN KEY(referer_id) REFERENCES referer(referer_id));  //Trace more about referer.

现在,有可能不止一个人提到了推荐,但我认为仅仅补偿一个推荐人是标准的商业惯例.所以,你永远不需要列出两个引用者.这将始终是1对1或1对多的关系;因此,你应该把它变成1对多的表.我对CASCADE的东西不是很精通,但我会试着弄清楚它是如何适合的.

乍一看,它显示ON UPDATE CASCADE ON DELETE CASCADE不属于我的答案,因为删除最后一个referal不应删除referer.

看a different example:

CREATE TABLE all_candy 
   (candy_num SERIAL PRIMARY KEY,candy_maker CHAR(25));

CREATE TABLE hard_candy 
   (candy_num INT,candy_flavor CHAR(20),FOREIGN KEY (candy_num) REFERENCES all_candy
    ON DELETE CASCADE)

如果你从hard_candy表中删除硬糖,那么你也是从all_candy表中删除它,因为硬糖是一种糖果,如果糖果的类型已经改变(例如,已经停止的糖果),那么无论如何,需要执行新的INSERT命令.

我在sqlite3中为ON UPDATE CASCADE和ON UPDATE DELETE运行了一个测试用例,它似乎没有效果.也许他们不能使用sqlite3的默认数据库引擎,但功能在官方SQLite网站上列出:a very descriptive,easy-to-follow example of ON UPDATE CASCADE by sqlite.org.阅读并看看你的想法.

这是我用于测试用例的模式:

BEGIN TRANSACTION;
CREATE TABLE candy(id integer primary key not null,name text,description text);
INSERT INTO candy VALUES(1,'Laffy Taffy','Delicious,soft candy.');
INSERT INTO candy VALUES(2,'Pop Rocks','A candy that explodes in your mouth.');
COMMIT;

BEGIN TRANSACTION;
CREATE TABLE hard_candy(id integer primary key not null,description text,foreign key(id,name,description) references hard_candy ON DELETE CASCADE ON UPDATE CASCADE);
INSERT INTO hard_candy VALUES(2,'A candy that explodes in your mouth.');
COMMIT;

在表的id-2描述字段中进行各种更新.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读