Alex:

On Wed, Apr 15, 2015 at 11:27:41PM +0200, Alex Becker wrote:
> Hi!

Hello,

> Thank you for your feedback. I also asked some colleagues about
> it. We agreed that the view approach would be the nice thing.
> 
> However, I do not know if I did it the right way / if I
> understood t correctly.
> 
> Given the table definition from my last mail, I added a view as
> follows:
> 
> CREATE VIEW v_navigation AS
> 
> SELECT content_types.content_type_id as target_type_id,
> 
> fancy_scripts.script_id as target_id
> 
> FROM content_types
> 
> JOIN fancy_scripts ON content_types.ident = "script"
> 
> UNION
> 
> SELECT content_types.content_type_id as target_type_id,
> 
> html_contents.content_id as target_id
> 
> FROM content_types
> 
> JOIN html_contents ON content_types.ident = "page"
> 
> 
> A table for the content types was also added. content_types is
> a set of: {<1,page>,<2,script>}

I think that what Tommi had in mind was something more like this
(excuse the T-SQL, but it's what I'm most familiar with):

            navigation
               1  1
              /    \
            0|1    0|1
html_navigation   script_navigation
       1                 1
       |                 |
       1                 1
 html_contents      fancy_scripts

CREATE TABLE navigation(
    navigation_id INT NOT NULL PRIMARY KEY,
    position INT NOT NULL UNIQUE,
    link_text VARCHAR(45) NOT NULL,
    );

CREATE TABLE html_navigation(
    navigation_id INT NOT NULL PRIMARY KEY
        CONSTRAINT FK_html_navigation_navigation
        FOREIGN KEY REFERENCES navigation(navigation_id),
    content_id INT NOT NULL
        CONSTRAINT FK_html_navigation_html_contents
        FOREIGN KEY REFERENCES html_contents(content_id)
    );

CREATE TABLE script_navigation(
    navigation_id INT NOT NULL PRIMARY KEY
        CONSTRAINT FK_html_navigation_navigation
        FOREIGN KEY REFERENCES navigation(navigation_id),
    script_id INT NOT NULL
        CONSTRAINT FK_html_navigation_fancy_scripts
        FOREIGN KEY REFERENCES fancy_scripts(script_id)
    );

CREATE TABLE target_type(
    target_type_id INT NOT NULL PRIMARY KEY,
    name VARCHAR(10) NOT NULL UNIQUE
    );

CREATE VIEW v_navigation AS
SELECT 
    a.navigation_id,
    a.position,
    a.link_text,
    /*or use foreign key if you wish*/ "content" AS target_type,
    c.content_id AS target_id
FROM navigation a, target_type b
INNER JOIN html_navigation c
    ON a.navigation_id = c.navigation_id
WHERE b.name = 'content'
UNION
SELECT 
    a.navigation_id,
    a.position,
    a.link_text,
    b.target_type_id AS target_type,
    c.script_id AS target_id
FROM navigation a, target_type b
INNER JOIN html_navigation c
    ON a.navigation_id = c.navigation_id
WHERE b.name = 'script';

Untested. Meant purely to illustrate the idea. Let me know if you
have any questions.

Regards,


-- 
Brandon McCaig <bamcc...@gmail.com> <bamcc...@castopulence.org>
Castopulence Software <https://www.castopulence.org/>
Blog <http://www.bambams.ca/>
perl -E '$_=q{V zrna gur orfg jvgu jung V fnl. }.
q{Vg qbrfa'\''g nyjnlf fbhaq gung jnl.};
tr/A-Ma-mN-Zn-z/N-Zn-zA-Ma-m/;say'

Attachment: signature.asc
Description: Digital signature

Reply via email to