我正在生成有关用户操作的日志记录.出于隐私原因,这些需要在N天后进行匿名处理.但是,我还需要针对此匿名数据运行报告.
我希望真实用户A的所有操作都在匿名日志中的假用户X下列出 - 一个用户的记录仍必须保留日志中一个(假的)用户的记录.这显然意味着我需要在真实用户和假用户之间进行一些映射,我在匿名化新记录时会使用这种映射.当然,这完全违背了匿名化的要点 - 如果有映射,则可以恢复原始用户数据.
例:
用户FrankMüller买了3罐汤.
三天后,用户FrankMüller要求退还3罐汤.
当我对第二个日志条目进行匿名化时,第一个日志条目已经被匿名化了.我仍然希望两个日志记录都指向同一个用户.嗯,这在实践中对我来说几乎是不可能的,所以我想使用一些分割数据的方法,希望能让我在数据中保持尽可能多的完整性.也许使用日志作为数据仓库 - 将所有内容分解为事实并接受无法分析某些维度的事实?
你以前遇到过这种情况吗?我有什么选择?我显然需要做出某种妥协 - 事实证明对你有效吗?如何充分利用这些数据?
我正在使用SQL Server 2008 Enterprise.我有一个表,其中一个列是指另一个表中的另一个列(在同一个数据库中)作为外键,这里是相关的SQL语句,更详细地说,表[Foo]中的列[AnotherID]指的是另一个table [Goo]的列[GID]作为外键.[GID]是表[Goo]上的主键和聚簇索引.
我的问题是,通过这种方式,如果我没有显式地在[Foo]上的[AnotherID]列上创建索引,是否会为[Foo]上的[AnotherID]列自动创建索引 - 因为它的外键引用列[表[Goo]上的GID]已经有主群集密钥索引?
CREATE TABLE [dbo].[Foo](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[AnotherID] [int] NULL,
[InsertTime] [datetime] NULL CONSTRAINT DEFAULT (getdate()),
CONSTRAINT [PK_Foo] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[Foo] WITH CHECK ADD CONSTRAINT [FK_Foo] FOREIGN KEY([Goo])
REFERENCES [dbo].[Goo] ([GID])
ALTER TABLE [dbo].[Foo] CHECK CONSTRAINT [FK_Foo]
Run Code Online (Sandbox Code Playgroud)
乔治,提前谢谢
直到最近,当我决定开始担心参照完整性等时,我一直在使用MyISAM并且没有定义明确的外键关系.
我正在研究一个存储战斗事件,战斗机统计数据的数据库,所以我认为这符合使用InnoDB和明确定义外键的标准.
我有一个战斗机表,其中有多个列是外键.我想知道是否建议始终明确定义外键关系,无论表中引用了多少外键?
特别是,对于这个表我有:
CREATE TABLE `fights` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`event_id` int(10) unsigned DEFAULT NULL,
`winner_id` int(10) unsigned DEFAULT NULL,
`referee_id` int(10) unsigned DEFAULT NULL,
`championship_match` enum('1','0') DEFAULT NULL,
`weight_class` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
我打算做referee_id,winner_id,event_id所有外键各自表ID列.这是要走的路吗?或者,为了性能原因,我是否应该以关系完整性为代价限制明确定义的外键数量?
我想出了两种相同想法的方法,并希望通过使用一种方法来避免任何明显的陷阱.我有一个表(tbl_post),其中一行可以与其他表(tbl_category,tbl_site,tbl_team)有很多关系.我有一个关系表来加入这些,但不知道哪个结构,条件或直接?希望以下内容能够解释......
tbl_post (simple post, can be associated with many categories, teams and sites)
* id
* title
* content
tbl_category
* id
* title
* other category only columns
tbl_team
* id
* title
* other team only columns
tbl_site
* id
* title
* other site only columns
----------------------------------------------------------
tbl_post_relationship
* id (pk)
* post_id (fk tbl_post)
* related_id (fk, dependant on related_type to either tbl_category, tbl_site or tbl_team)
* related_type (category, site or team)
____________________________________
|id|post_id|related_id|related_type|
|--|-------|----------|------------|
| …Run Code Online (Sandbox Code Playgroud) sql database database-design foreign-keys relational-database
这里有一些通用表,我试图完全理解如何正确设置数据库表.这些设置是否正确?我希望能够尽快查找用户的项目和项目详细信息.此示例的FYI ItemDetailsX不共享相同的数据字段.
我有点卡在外键和辅助键上.什么时候使用辅助密钥和外键?
tbl_Users 1:*tbl_Item //关系
tbl_Item 1:1 tbl_ItemDetail1&tbl_ItemDetail2 //关系
tbl_Item 1:N tbl_ItemDetail3 //关联
tbl_Users
-UserID - PK
tbl_Item
-ItemID - PK
-UserID - FK
tbl_ItemDetail1
-ItemDetail1ID - PK //如果我有ItemID,我甚至需要这个吗?与...有1:1的关系
-ItemID - FK
-计数
-duration
-频率
tbl_ItemDetail2
-ItemDetail2ID - PK //如果我有ItemID,我甚至需要这个吗?与...有1:1的关系
-ItemID - FK
-开关
-温度
-电压
tbl_ItemDetail3
-ItemDetail3ID - PK //具有1:N的关系
-ItemID - FK
- 受控价值1
-Contrived Valu2
编辑:
感谢您的回复,我已更新原始帖子以正确反映我的数据库.
在我创建的数据库中,Item有~9项详细信息.每个项目的详细信息是5-15列数据.
有一个100列的表没有意义......?
我有2张桌子:Lecturer和Department.
该Lecturer表包含以下列:
id, email, phone, expertise, dept_id.
Run Code Online (Sandbox Code Playgroud)
该Department表有这些:
dept_id, dept_name, dept_code, dept_program.
Run Code Online (Sandbox Code Playgroud)
样本数据如下:
讲师表
(id=1, email= a@a.com, phone= 9999, expertise= multimedia and programming, dept_id=1)
Run Code Online (Sandbox Code Playgroud)
部门表
(id=1, dept_name=Computer Science, dept_code=CS, dept_program=Bachelor of Comp Science)
Run Code Online (Sandbox Code Playgroud)
专业知识专栏有几个值,一些讲师可能有超过5个专业领域,所以我认为我应该创建另一个专业知识表.但是如何将多种专业知识属性插入讲师表?
我只是有一个关于符号的快速问题.我现在有两张桌子.
这个有基本的动物信息:
create table d_animals (
an_id integer primary key
, an_gender varchar2(1) not null
, an_dob date not null
, an_name varchar2(10) not null
);
Run Code Online (Sandbox Code Playgroud)
这个是关于猫:
create table d_cats (
an_id integer primary key
, feline_leukemia_test_date date not null
, an_id foreign key references d_animals_(an_id)
);
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在尝试使用an_id作为d_cats中的主键,但也引用了d_animals表中的an_id.我为d_cats收到以下错误:
ORA-00957: duplicate column name
Run Code Online (Sandbox Code Playgroud)
那我该怎么写这个呢?
另外,我不想为d_cats创建另一个列.我的教授希望我们只用an_id和feline_leukemia_test_Date写d_cats.谢谢.
我要表:
CREATE TABLE `artist` (
`name` TEXT NOT NULL,
`gender` TEXT NOT NULL,
`city` TEXT NOT NULL,
PRIMARY KEY(name)
);
Run Code Online (Sandbox Code Playgroud)
和
create table artwork(
title text,
location text,
artist text,
primary key (title, artist),
foreign key (artist) references artist(name)
);
Run Code Online (Sandbox Code Playgroud)
'artwork'表中的'artist'列允许我插入不在引用列中的数据.
FOREIGN KEY约束还可以防止将无效数据插入到外键列中,因为它必须是它指向的表中包含的值之一.(c)W3school
我做错了吗?
我有一个LessonGroup模型,其表格是lesson_groups.如果我想使用此表id在另一个TABEL作为外键,我应该选择什么样的列名Laravel可以自动识别它作为一个外键到lesson_group表?
lesson_groups
id
name
-----------------------------------------
fields
id
//foreign key to lesson_groups(what should be the name of this column?)
name
Run Code Online (Sandbox Code Playgroud) 我想创建两个表users和roles.我的代码如下:
2014_10_12_000000_create_users_table.php
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->integer('role')->unsigned();
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
$table->foreign('role')
->references('id')
->on('roles');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}
}
Run Code Online (Sandbox Code Playgroud)
2016_03_09_004256_create_roles_table.php
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateRolesTable extends Migration
{
/**
* Run the migrations. …Run Code Online (Sandbox Code Playgroud) foreign-keys ×10
sql ×4
database ×2
mysql ×2
indexing ×1
innodb ×1
laravel ×1
laravel-5 ×1
laravel-5.2 ×1
logging ×1
model ×1
oracle ×1
primary-key ×1
privacy ×1
sqlite ×1
syntax-error ×1