Re: Designing tables based on user input and defined values

Поиск
Список
Период
Сортировка
От Aaron Christensen
Тема Re: Designing tables based on user input and defined values
Дата
Msg-id CAOA=+NvOCbR0VPF0hjU0eBScK1oS=xSqxf4D+xm+=d+zEaZhjw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Designing tables based on user input and defined values  (Adrian Klaver <adrian.klaver@aklaver.com>)
Ответы Re: Designing tables based on user input and defined values  (Adrian Klaver <adrian.klaver@aklaver.com>)
Список pgsql-general


On Sun, Feb 28, 2016 at 12:36 AM, Adrian Klaver <adrian.klaver@aklaver.com> wrote:
On 02/27/2016 09:19 PM, Aaron Christensen wrote:
There is somewhat a method to this madness :).  There isn't a formula
that determines outcome.  They will just be arbitrary values that I assign.

Obviously, I'm new to SQL but I'm trying to understand your suggestion.
It appears that table Final has the composite/primary keys of goal and
size which will be foreign keyed to table User.   How exactly does the
user submit/store his goal/size and be assigned an outcome if the User
table is using FKs  for goal/size?  It seems backwards to me.

Well there a some unanswered questions, answers to which will shape the ultimate design:

Who actually creates the relationship between goal/size and outcome, the user or you?

Can a user have more than one combination of goal/size?

As to how the user picks their goal/size, that is more an application question. What the relationship between user and final does is ensure that a user can only select a goal/size combination that exists, which I assumed is what you where looking for when you mentioned a lookup table. If I misunderstood then maybe the answers to the above questions will clarify.


It's not that you're misunderstanding, it's that I'm doing a horrible job describing my question.

For answers to your questions:
I will be creating the relationship between goal/size and outcome.  The user can only provide their goal/size on any particular date.  Based on their goal size, I will assign to them the corresponding outcome which will be used as an input to some formula.  Any user can have one or multiple goal/size combinations.  That is correct, the user will only be able to select preexisting goals and sizes.  

 


On Feb 27, 2016 7:04 PM, "Adrian Klaver" <adrian.klaver@aklaver.com
<mailto:adrian.klaver@aklaver.com>> wrote:

    On 02/27/2016 03:12 PM, Aaron Christensen wrote:

        Hi Adrian,

        Thank you for responding with the SQL code.  However, outcome
        cannot be
        a primary key because outcome values will be duplicates in some
        instances.  I am not sure how else to have a lookup table that
        stores
        static values.


    Well first is there a method to the madness:)?

    In other words is the choice of an outcome arbitrary or is there
    some calculation that goes into it?

    Otherwise, something like?:

    test=> create table final(goal varchar, size varchar, outcome int,
    PRIMARY KEY(goal, size));

    test=> create table user_tbl(user_id int PRIMARY KEY, user_name
    varchar,  goal varchar, size varchar, CONSTRAINT g_s_fk  FOREIGN KEY
    (goal, size)  REFERENCES final(goal, size));


    test=> \d final
               Table "public.final"
      Column  |       Type        | Modifiers
    ---------+-------------------+-----------
      goal    | character varying | not null
      size    | character varying | not null
      outcome | integer           |
    Indexes:
         "final_pkey" PRIMARY KEY, btree (goal, size)
    Referenced by:
         TABLE "user_tbl" CONSTRAINT "g_s_fk" FOREIGN KEY (goal, size)
    REFERENCES final(goal, size)

    test=> \d user_tbl
               Table "public.user_tbl"
       Column   |       Type        | Modifiers
    -----------+-------------------+-----------
      user_id   | integer           | not null
      user_name | character varying |
      goal      | character varying |
      size      | character varying |
    Indexes:
         "user_tbl_pkey" PRIMARY KEY, btree (user_id)
    Foreign-key constraints:
         "g_s_fk" FOREIGN KEY (goal, size) REFERENCES final(goal, size)





        Thanks!
        Aaron

        On Sat, Feb 27, 2016 at 5:15 PM, Adrian Klaver
        <adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>
        <mailto:adrian.klaver@aklaver.com

        <mailto:adrian.klaver@aklaver.com>>> wrote:

             On 02/27/2016 01:15 PM, Aaron Christensen wrote:

                 Hello,

                 I am trying to figure out the correct way to design the
        database
                 table
                 to support the following situation.

                 To start, I have an Excel spreadsheet that maps particular
                 combinations
                 of Goal and Size to an Outcome.  Goal choices are "Long",
                 "Average", and
                 "Short".  Size choices are "Big", "Medium", and
        "Small".  The
                 designated
                 Outcome for each goal/size combination are number
        values between
                 12 and
                 20.  Please refer to attachment "goalSizeExcel.pdf" for
        the Excel
                 spreadsheet version.

                 In order to use this data in the database, I converted
        it to an SQL
                 table with attributes "Goal", "Size", and "OUTCOME".
        "Goal" and
                 "Size"
                 serve as composite primary keys.  Please refer to
        attachment
                 "TableFinal.pdf" for the illustration.

                 Please refer to "UserOutcome.jpg" for the ER diagram.
        The user
                 inputs
                 his name, goal, and size.  Based on his goal and size
                 combination, he is
                 assigned a particular "outcome".

                 I am not exactly sure if my attached ER diagram is the
        correct
                 way to
                 model this.  I don't want to add a UserId [FK] to table
        Final
                 because
                 table Final is supposed to serve as a lookup or
        reference table
                 (I am
                 not sure of the correct terminology).

                 Please advise if I am on the right track or if I should
        follow a
                 different design.  I intend to have a few other
        lookup/reference
                 tables
                 that will serve a similar purpose.


              >From a quick look it seems to me that outcome is the
        primary key
             to goal and size, so

             CREATE TABLE final (
                outcome int PRIMARY KEY,
                goal varchar,
                size varchar
             )

             CREATE TABLE user (
             name varchar,
             outcome_fk int REFERENCES final(outcome) ON ...
             )



                 Thank you!
                 Aaron








             --
             Adrian Klaver
        adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>
        <mailto:adrian.klaver@aklaver.com
        <mailto:adrian.klaver@aklaver.com>>




    --
    Adrian Klaver
    adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>



--
Adrian Klaver
adrian.klaver@aklaver.com

В списке pgsql-general по дате отправления:

Предыдущее
От: "Sterpu Victor"
Дата:
Сообщение: Re: CONCAT returns null
Следующее
От: Aaron Christensen
Дата:
Сообщение: Re: Designing tables based on user input and defined values