Leser: 1
9 Einträge, 1 Seite |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE user (
id SERIAL PRIMRAY KEY,
username VARCHAR(200) UNIQUE,
password VARCHAR(200),
locked BOOLEAN DEFAULT 1,
email VARCHAR(200)
);
CREATE TABLE group (
id SERIAL PRIMARY KEY,
groupname VARCHAR(24) UNIQUE,
description VARCHAR(200)
);
CREATE TABLE user_group (
user_id INTEGER REFERENCES user(id),
group_id INTEGER REFERENCES group(id),
PRIMARY KEY(user_id, group_id)
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package BloonixDB::User;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table('user');
__PACKAGE__->add_columns(qw/id username password locked email/);
__PACKAGE__->set_primary_key(qw/id/);
__PACKAGE__->has_many('user_groups', 'BloonixDB::UserGroup', { 'foreign.user_id' => 'self.id' });
package BloonixDB::Group;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table('group');
__PACKAGE__->add_columns(qw/id groupname description/);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->has_many('user_groups', 'BloonixDB::UserGroup', { 'foreign.group_id' => 'self.id' });
package BloonixDB::UserGroup;
__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table('user_group');
__PACKAGE__->add_columns(qw/user_id group_id/);
__PACKAGE__->belongs_to('users', 'BloonixDB::User', { 'foreign.user_id' => 'self.id' });
__PACKAGE__->belongs_to('groups', 'BloonixDB::Group', { 'foreign.group_id' => 'self.id' });
1;
QuotePrimärschlüssel: Ein ausgewählter Schlüsselkandidat. Die Werte dieses Schlüssels
können in einer anderen Tabelle als Fremdschlüssel verwendet werden.
QuoteFremdschlüssel: Ein Attribut oder eine Attributkombination einer Relation, welches auf
einen Primärschlüssel (bzw. Schlüsselkandidat) einer anderen oder der gleichen Relation
verweist. Ein Fremdschlüssel in einer Relation R ist in aller Regel kein Schlüssel im
engeren Sinne für diese Relation. Es handelt sich aber um einen Sekundärschlüssel.
1
2
3
4
5
6
7
8
9
10
11
12
13
+---------+
| foreign |
+---------+
| id (PK) |
| col1 |
+---------+
+---------+
| self |
+---------+
| sid |
| fid (FK) |
+---------+
1 2 3 4 5
package MyDB::ForeignTable; #.... __PACKAGE__->has_many( 'selfs' => 'MyDB::SelfTable', {"foreign.fid" => "self.id"});
1 2 3 4 5
package MyDB::SelfTable; #... __PACKAGE__->belongs_to( 'foreign' => 'MyDB::ForeignTable', {'foreign.id' => 'self.fid'});
bloonix+2007-09-23 15:21:40--Okay, das erklärt einiges. Dazu muss ich aber schreiben,
dass es eine wirklich misslungene Benutzung des Wortes
"Foreign" ist. :/
Das hat mich ziemlich durcheinander gebracht.
9 Einträge, 1 Seite |